/**
 * 文件名：@ReflectMethodInvoker.java <br/>
 * 包名：cn.efunbox.afw.core.invoker <br/>
 * 项目名：afw-core <br/>
 * @author xtwin <br/>
 */
package cn.efunbox.afw.core.invoker;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import cn.efunbox.afw.core.exception.SystemException;

/**
 * 类名：ReflectMethodInvoker  <br />
 *
 * 功能：使用反射机制，执行目标方法
 *
 * @author xtwin <br />
 * 创建时间：2016年8月15日 上午10:39:54  <br />
 * @version 2016年8月15日
 */
public class ReflectMethodInvoker implements MethodInvoker {

	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2016年8月15日 上午10:40:13<br/>
	 * 
	 * @param target
	 * @param method
	 * @param arguments
	 * @return
	 * @throws Exception <br/>
	 * @see cn.efunbox.afw.core.invoker.MethodInvoker#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
	 */
	@Override
	public Object invoke(Object target, Method method, Object[] arguments) throws Exception {
		// 使用反射机制执行
		try {
			return method.invoke(target, arguments);
		} catch (InvocationTargetException e) {
			// 异常处理
			Throwable exp = e.getTargetException();
			if (exp instanceof Exception) {
				throw (Exception) exp;
			} else {
				throw new SystemException(exp.getMessage());
			}
		}
	}
}